<?php
class Mimage extends CI_Model{

    protected $_gallery_path = "";
    protected $_gallery_url = "";
    var $image_data;

    public function __construct(){
        parent::__construct();
        $this->load->database();
        //Lấy đường dẫn url của thư mục chứa hình ảnh được upload
        $this->_gallery_url = base_url()."public/frontend/hinh-anh/";
        //Lấy đường dẫn vật lý của thư mục chứa hình ảnh đươc upload
        $this->_gallery_path = realpath(APPPATH. "../public/frontend/hinh-anh/");
    }

    public function getImage(){
        $this->db->select(' id, filename, update_date, alt, title, width, height, type');
        $this->db->from('image');
        $query = $this->db->get();
        return $query->result_array();
    }

    public function getImageByLimit($number, $offset){
        $this->db->select(' id, filename, update_date, alt, title, width, height, type');
        $this->db->from('image');
        $this->db->order_by('id', 'desc'); 
        $this->db->limit($number, $offset);
        $query = $this->db->get();
        return $query->result_array();
    }

    //hàm thực hiện công việc upload và resize lại hình ảnh
    public function uploadImage(){
		$config = array('upload_path'   => $this->_gallery_path . "/lagre",
						'allowed_types' => 'gif|jpg|png',
						'max_size'      => '20000');
		$this->load->library("upload",$config);
		if(!$this->upload->do_upload("filename")){
			$error = array($this->upload->display_errors());
		}else{
			$image_data = $this->upload->data();	
			
			//kết thúc công đoạn upload hình ảnh
	
			 $this->load->library('image_lib');
	
	         /* First size */
	         $configSize1['image_library']   = 'gd2';
	         $configSize1['source_image']    = $image_data['full_path'];
	         $configSize1['create_thumb']    = TRUE;
	         $configSize1['maintain_ratio']  = TRUE;
	         $configSize1['width']           = 400;
	         $configSize1['height']          = 300;
	         $configSize1['new_image']   = $this->_gallery_path . "/medium";
	
	         $this->image_lib->initialize($configSize1);
	         $this->image_lib->resize();
	         $this->image_lib->clear();
	
	         /* Second size */    
	         $configSize2['image_library']   = 'gd2';
	         $configSize2['source_image']    = $image_data['full_path'];
	         $configSize2['create_thumb']    = TRUE;
	         $configSize2['maintain_ratio']  = TRUE;
	         $configSize2['width']           = 200;
	         $configSize2['height']          = 200;
	         $configSize2['new_image']   = $this->_gallery_path . "/small";
	
	         $this->image_lib->initialize($configSize2);
	         $this->image_lib->resize();
	         $this->image_lib->clear();
			//kết thúc công đoạn resize lại hình ảnh
			
			return array($image_data, $configSize1, $configSize2);
		}	
	}

	//hàm lấy hình ảnh từ thư mục lưu file đã upload
	public function get_images(){
		$file = scandir($this->_gallery_path);
		$file = array_diff($file, array('.', '..', 'thumbs'));
		//tên tất cả các file hình trong thư mục đã được upload lên.
		$images = array();
		foreach($file as $img){
			$images[] = array("url"        => $this->_gallery_url . $img,
							  "thumb_url" => $this->_gallery_url . "thumbs/" . $img);	
		}
		return $images;
	}

    public function insertImage($param){
        $data = array(
            'id' => NULL,
            'filename' => $param['filename'],
            'alt' => $param['alt'],
            'title' => $param['title'],
            'width' => $param['width'],
            'height' => $param['height'],
            'type' => $param['type']
        );
        $this->db->insert('image', $data); 
        return $this->db->insert_id();
    }

    public function insertImageBook($param){
        $data = array(
            'id' => NULL,
            'filename' => $param['filename'],
            'width' => $param['width'],
            'height' => $param['height'], 
            'type' => $param['type'], 
        );
        $this->db->insert('image', $data); 
        return $this->db->insert_id();
    }

    public function updateImage($param){
        $data = array(
            'filename' => $param['filename'],
            'alt' => $param['alt'],
            'title' => $param['title'],
            'width' => $param['width'],
            'height' => $param['height'],
            'type' => $param['type']
        );
        $this->db->where('id', $param['id']);
        $this->db->update('image', $data);
    }

    public function deteleImage($id){
        $this->db->where('id', $id);
        $this->db->delete('image');
    }

    public function getImageByID($image_id){
        $this->db->select(' id, filename, update_date, alt, title, width, height, type');
        $this->db->from('image');
        $this->db->where('id', $image_id);
        $query = $this->db->get();
        return $query->row_array();
    }

    public function countImage(){
        $this->db->select('count(image.id) as total');
        $this->db->from('image');       
        $query = $this->db->get();
        return $query->row('total');
    }
}
?>